---
title: gradle
---

maven 偏向于依赖管理，gradle 偏向于构建。

## 概述

### Gradle 是一种构建工具

Maven 的主要功能主要分为 5 点，分别是依赖管理系统、多模块管理、一致的项目结构、一致的构建模型和插件机制。

Gradle 是继 Maven 之后的新一代构建工具，它采用 groovy 的 DSL 语言作为脚本，相比传统构建工具通过 XML 来配置而言，最直观的感受就是脚本更加的简洁、优雅。
它采用了同 Maven 一致的目录结构，可以与 Maven 一样使用 Maven 中央仓库以及各类仓库的资源。

### Gradle 的优势
依赖管理：将项目中的 jar 包管理起来，可以使用 Maven 的远程仓库、或者本地文件系统。
编译打包：可以通过脚本实现花样打包，包括修改文件、添加亦或者排除某些类或资源、采用指定 JDK 版本构建、打包后自动上传等等。
多项目支持：无论是 Java 、groovy、scala、c++ 都有良好的支持。
跨平台支持：gradle 是基于 JVM 的，只要有 JVM 就可以让 gradle 运行。

:::tip 重要的区别
1. 灵活的脚本：可以使用 groovy 灵活的编写任务完成你想要做的任何事情。
2. Gradle 更快些，支持增量构建。为了实现增量构建，gradle 将每一个 task 都分成了三部分，分别是 input 输入，任务本身和 output 输出。
:::
## 安装配置
## 依赖管理
相较于 maven 一大串的 XML 配置，gradle 的依赖项仅需一行。
```gradle
dependencies {
    /*默认的 scope 会让依赖在编译和运行时均包括在内*/
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    /*只开发*/
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    /*注解处理*/
    annotationProcessor 'org.projectlombok:lombok'
    /*测试依赖*/
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
```
gradle 依赖的力度控制相较于 Maven 也更加精细，maven 只有 compile、provided、test、runtime 四种 scope ，而 gradle 有以下四种 scope：
1. implementation, 默认的 scope。implementation 的作用域会让依赖在编译和运行时均包含在内，但是不会传递给类库使用者。
2. api: 和 implementation类似，都是编译和运行时可见的依赖。但是 api 允许我们将自己类库的依赖暴露给我们类库的使用者。
3. compileOnly和runtimeOnly ,一种只在编译时可见，一种只在运行时可见，runtimeOnly 和 Maven 的 provided 比较接近。
4. testImplementation：这种依赖在测试编译时和运行时可见，类似于 Maven 的 test 作用域
5. testCompileOnly 和 testRuntimeOnly ，这两种类似于 compileOnly 和runtimeOnly ，但是作用于测试编译时和运行时。





